#include "pch.hpp"
#include "Responses.hpp"

using namespace Engine;
using namespace Engine::Debugger;




Response::Response()
{}
///////////////////////////////////////////////////////////////////////////////////////////////////

Response::Response(boost::uuids::uuid tag)
	: Message(tag)
{}
///////////////////////////////////////////////////////////////////////////////////////////////////




Response::Type Response::type() const
{
	return Message::Response;
}
///////////////////////////////////////////////////////////////////////////////////////////////////




ScriptStateResponse::ScriptStateResponse()
{}
///////////////////////////////////////////////////////////////////////////////////////////////////

ScriptStateResponse::ScriptStateResponse(boost::uuids::uuid tag)
	: Response(tag)
	, m_failed(true)
{}
///////////////////////////////////////////////////////////////////////////////////////////////////

ScriptStateResponse::ScriptStateResponse(const std::vector<char>& state, boost::uuids::uuid tag)
	: Response(tag)
	, m_state(state)
	, m_failed(false)
{}
///////////////////////////////////////////////////////////////////////////////////////////////////

Response::Type ScriptStateResponse::type() const
{
	return ReturnCallstack;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

const std::vector<char>& ScriptStateResponse::value() const
{
	return m_state;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

void ScriptStateResponse::store(boostext::iostreams::bin_ostream& stream) const
{
	__super::store(stream);
	stream << m_state;
	stream << m_failed;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

void ScriptStateResponse::restore(boostext::iostreams::bin_istream& stream)
{
	__super::restore(stream);
	stream >> m_state;
	stream >> m_failed;
}
///////////////////////////////////////////////////////////////////////////////////////////////////




CallstackResponse::CallstackResponse()
{}
///////////////////////////////////////////////////////////////////////////////////////////////////

CallstackResponse::CallstackResponse(boost::uuids::uuid tag)
	: Response(tag)
	, m_failed(true)
{}
///////////////////////////////////////////////////////////////////////////////////////////////////

CallstackResponse::CallstackResponse(const Debugger::Callstack& callstack, boost::uuids::uuid tag)
	: Response(tag)
	, m_stack(callstack)
	, m_failed(false)
{}
///////////////////////////////////////////////////////////////////////////////////////////////////

Response::Type CallstackResponse::type() const
{
	return ReturnCallstack;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

const Debugger::Callstack& CallstackResponse::value() const
{
	return m_stack;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

void CallstackResponse::store(boostext::iostreams::bin_ostream& stream) const
{
	__super::store(stream);
	stream << m_stack;
	stream << m_failed;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

void CallstackResponse::restore(boostext::iostreams::bin_istream& stream)
{
	__super::restore(stream);
	stream >> m_stack;
	stream >> m_failed;
}
///////////////////////////////////////////////////////////////////////////////////////////////////
